1. Field of the Invention
The embodiments herein relate to management of coprocessor hardware accelerator resources in multi-processor computer systems, and more specifically, to a system and method for terminating a processing job previously dispatched to a coprocessor hardware accelerator.
2. Description of the Related Art
In computer systems employing multiple processor cores, it is advantageous to employ hardware accelerator coprocessors to meet throughput requirements for specific applications. Hardware accelerator coprocessors supplement the functions of a primary CPU by providing a dedicated processing resource for computationally intensive operations, such as floating point operations, encryption and compression/decompression. Coprocessors utilized for hardware acceleration may be collocated with a main CPU, as in the case of a floating point unit or graphics processing unit, or configured in a block of coprocessors and coupled to a bridge that interfaces with a main system bus to provide connectivity to other nodes on the bus.
Tasks are off-loaded by a processor to a coprocessor block attached to a system bus by sending a request to the coprocessor, which may contain commands, source and target addresses, lengths, and other fields. Coprocessor request data is formatted and stored in a request queue and issued to a coprocessor when one is available with the type of hardware accelerator engine required to handle the request submitted.
A coprocessor executing a job fetches operands, performs the function in an attached hardware acceleration engine, stores the results, and indicates completion via status writes and optionally an interrupt. Coprocessors may hold multiple job requests, with each one in various stages of completion. A coprocessor may be configured to simultaneously prefetch operands, execute a processing job or writeback results and status. A coprocessor may also pipeline certain functions using register arrays to accommodate simultaneous processing.
In some situations it is desirable to allow a processor to terminate one or more job requests that have been issued, particularly where there is unacceptable delay in executing the request or the results are no longer needed due to a system interrupt or flushing of an active instruction stream. However, termination of a job request must allow subsequently issued coprocessor requests to proceed, so that unrelated job requests waiting in queue for the resources of a particular coprocessor are not discarded as well.
Accordingly, there exists a need in the art to overcome the deficiencies and limitations described hereinabove.